#ifndef BASE_MNETSERVICE_H
#define BASE_MNETSERVICE_H

#include "ct_service.h"
#include "ct_mtcp_srv.h"

class ctMNetService : 
        public ctService
{
        public:
                virtual ~ctMNetService() { instance_ = NULL; };

                /*
                 * \brief 根据得到的TCP/IP连接获取一个连接任务
                 * \param sock TCP/IP套接口
                 * \param srcPort 由于服务器绑定了多个端口，这个参数指定连接来自那个绑定端口
                 * \return 新建立的连接任务
                 */
                virtual void NewTCPTask(const int sock,const WORD srcPort) = 0;

                /*
                 * \brief 绑定服务到某个端口
                 * \param name 待绑定端口名称
                 * \param port 待绑定的端口
                 * \return 绑定是否成功
                 */
                bool Bind(const std::string &name,const WORD port)
                {
                        if (tcp_server_)
                                return tcp_server_->bind(name,port);
                        else
                                return false;
                }

        protected:
                /*
                 * \brief 构造函数
                 * 受保护的构造函数，实现了Singleton设计模式，保证了一个进程中只有一个类实例
                 * \param name 名称
                 */
                ctMNetService(const std::string &name)
                        : ctService(name)
                {
                        instance_ = this;
                        service_name_ = name;
                        tcp_server_ = NULL;
                }

                bool init();
                bool serviceCallBack();
                void final();

        private:
                static ctMNetService *instance_;//类的唯一实例指针，包括派生类，初始化为空指针
                std::string service_name_;      //网络服务器名称
                ctMTCPServer *tcp_server_;      //TCP服务器实例指针 
};
#endif //BASE_MNETSERVICE_H
